package com.lagou.module2.task1;

import java.util.Random;
import java.util.Scanner;

/**
 * 作业1：实现二维数组元素的累加和并打印，实现如下需求
 *    1. 定义一个长度为[16][16]的整型二维数组
 *    2. 实现二维数组所有行和所有列中所有元素的累加和并打印
 *    3. 实现二维数组中左上角到右下角和右上角到左下角所有元素的累加和并打印
 */


public class ArrayArraySum {

    //1. 声明一个长度为[16][16]的元素为init类型的二维数组，也就是16行16列
    private int[][] arr = new int[16][16];

    //2. 定义一个show方法，查看输入指定元素后的二维数组
    public void show(){
        //定义外层for循环打印行数
        for (int i = 0; i<arr.length; i++){
            //定义内存for循环打印列数
            for (int j = 0; j<arr[i].length;j++){
                System.out.print(arr[i][j] + " ");
            }
            System.out.println();
        }
    }

    //3. 给数组赋值
    public void setArray(int line, int row, int value){
        arr[line][row] = value;
    }

    //4. 数组中所有行中所有行元素的累加和，并打印
    public void allLineSum(){
        for (int i = 0; i<arr.length;i++){
            int cnt = 0;
            for (int j = 0;j<arr[i].length;j++){
                cnt += arr[i][j];
            }
            System.out.println("第" + i + "行所有元素的累加和：" + cnt);
        }
    }

    //5. 分别实现二维数组中所有列中所有列元素的累加和，并打印
    public void allRowSum(){
        //定义一个长度为16的int类型数组，用以存储二维数组中列元素累加和的值
        int[] rowSun = new int[16];
        for (int i = 0;i<arr.length;i++){
            for (int j=0;j<arr[i].length;j++){
                rowSun[j] += arr[i][j];
            }
            System.out.println("第" + i + "列所有元素的和" + rowSun[i]);
        }
    }

    //6. 二维数组中，右上角到左下角 所有元素的累加和并打印
    public void topLeftCornerSum(){
//        int sum = 0;
//        for (int i = 0; i<arr.length;i++){
//            for (int j = 0; j<arr[i].length;j++){
//                if (i<=j){
//                    sum += arr[i][j];
//                }
//            }
//        }
        int sum = 0;
        for (int i = 0; i< arr.length; i++){
            sum += arr[i][15-i];
        }
        System.out.println("右上角到左下角所有元素累加和为：" + sum);
    }

    //7. 二维数组中，左上角到右下角 所有元素的累加和并打印
    public void topRightCornerSum(){
//        int count =0;
//        for (int i = 0; i<arr.length;i++){
//            for (int j = 0; j<arr[i].length;j++){
//                if (i>=j){
//                    count += arr[i][j];
//                }
//            }
//        }
        int count = 0;
        for (int i=0; i<arr.length;i++){
            count += arr[i][i];
        }
        System.out.println("左上角到右下角所有元素累加和为：" + count);
    }

    public static void main(String[] args) {
        // 创建类型为本类类型的对象
        ArrayArraySum arraySum = new ArrayArraySum();

        while (true) {
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入二维数组行：");
            int line = sc.nextInt();
            System.out.println("请输入二维数组列：");
            int row = sc.nextInt();
            System.out.println("请输入设置的整数");
            int value = sc.nextInt();
            //为array赋值
            arraySum.setArray(line, row, value);
            //打印数组中所有行和列中所有元素
            arraySum.show();
            //打印所有行元素累加和
            arraySum.allLineSum();
            //打印所有列元素累加和
            arraySum.allRowSum();
            //打印左上角到右下角元素累加和
            arraySum.topRightCornerSum();
            //打印右上角到左下角元素累加和
            arraySum.topLeftCornerSum();
        }
    }


}
